/**
 <p>处理单表的gridpanel控件</p>
 * xtype = cceafgridpanel

 * @module Ext-ux-cceaf-control
 * @class cceaf.control.GridPanel
 * @extends Ext.grid.Panel
 * @since 1.0
 */
Ext.define('cceaf.control.GridPanel',{
	extend: 'Ext.grid.Panel', 
    alias: 'widget.cceafgridpanel',
    
    requires: [
        'cceaf.util.ExtHelper'
    ],

	constructor: function(config){
		config = config || {};
		
		cceaf.control.GridPanel.superclass.constructor.apply(this, arguments);
	},

	/**
	 * 是否显示分页栏，默认显示
	 *
     * @property hasPagingToolbar 
     * @type boolean
     * @default true
     */
	hasPagingToolbar: true,
	
	/**
	 * 编辑表单
	 *
     * @property billForm 
     * @type Ext.form.Panel
     * @default null
     */
	billForm: null,//表单
	
	/**
	 * 每次显示billform时，是否都重新创建
	 *
     * @property newFormCreate 
     * @type boolean
     * @default false
     */
	newFormCreate: false,
	
	/**
	 * 页面状态,add-新增页面  edit-修改页面 delete-删除页面 view-查看页面
	 *
     * @property pageStatus 
     * @type String
     * @default null
     */
	pageStatus: null,
	
	/**
	 * 模块名称，在tree的title上显示
	 *
     * @property moduleName 
     * @type String
     * @default null
     */
	moduleName: "",
	
	/**
	 * 列表model
	 *
     * @property model 
     * @type String
     * @default null
     */
	model: null,
	
	/**
	 * 查询的action
	 *
     * @property queryAction 
     * @type String
     * @default null
     */
	queryAction: null,
	
	/**
	 * 增加的action
	 *
     * @property addAction 
     * @type String
     * @default null
     */
	addAction: null,
	
	/**
	 * 编辑的action
	 *
     * @property editAction 
     * @type String
     * @default null
     */
	editAction: null,
	
	/**
	 * 获取对象的action，一般为action中的findByKey
	 *
     * @property findByKeyAction 
     * @type String
     * @default null
     */
	findByKeyAction: null,
	
	/**
	 * 查看的action，一般为action中的findByKey
	 *
     * @property viewAction 
     * @type String
     * @default null
     */
	viewAction: null,
	
	/**
	 * 删除的action
	 *
     * @property deleteAction 
     * @type String
     * @default null
     */
	deleteAction: null,
	
	/**
	 * 主键名称集合，以,分开
	 *
     * @property masterKeyIds 
     * @type String
     * @default null
     */
	masterKeyIds: null,
	
	/**
	 * 把查询列表导出成excel的action
	 *
     * @property statColumns 
     * @type Array columns
     * @default null
     */
	statColumns: null,
	
	/**
	 * 统计action
	 *
     * @property statAction 
     * @type String
     * @default null
     */
	statAction: null,
	
	/**
	 * 统计的model
	 *
     * @property statModel 
     * @type String
     * @default null
     */
	statModel: null,
	
	/**
	 * 查询区
	 *
     * @property queryToolbar 
     * @type Array(toolbar)
     * @default null
     */
	queryToolbar: null,
	
	/**
	 * 是否显示默认查询控件,默认显示
	 *
     * @property showqueryToolbar 
     * @type attribute Boolean
     * @default false
     */
	isShowQueryToolbar:true,
	
	/**
	 * 操作区的toolbar，在组装后的toolbar后追加
	 *
     * @property operateToolbar 
     * @type toolbar
     * @default null
     */
	operateToolbar: null,
	
	/**
	 * 操作区的toolbar
	 *
     * @property reOperateToolbar 
     * @type attribute toolbar
     * @default null
     */
	reOperateToolbar: null,
	
	/**
	 * 弹出窗口大小，默认如下：
	 * <br> popWindow: {
	 * <br> 	width: 530,
	 * <br> 	heigth: 400
	 * <br> }
	 *
     * @property popWindow 
     * @type attribute
     * @default null
     */
	popWindow: {
		width: 530,
		height: 400
	},
	
	/**
	 * 主表中子表集合字段名
	 *
     * @property details 
     * @type attribute String
     * @default null
     */
	details: null,
	
	/**
	 * 是否为card布局显示
	 *
     * @property cardLayout 
     * @type attribute Boolean
     * @default false
     */
	cardLayout: false,
	
	initComponent : function(){
		var config = this;

		var columns = config.columns;
		if (!columns) {
			cceaf.util.ExtHelper.showErrorDialog("必须设置grid的columns！");
		}
		
		//定义数据源
	    var ds = new Ext.data.Store({
	    	proxy: {
	    		type: 'ajax',
	    		url:  config.queryAction,
	    		actionMethods: {  
		            read: 'POST'  
		        },  
	    		reader: {
					type: 'json',
					root: 'data',
					totalProperty: 'totalCount',
					messageProperty: 'message'
				}
			},
			
	        listeners: {
	        	'load': function(){
	        		var jr = ds.getProxy().getReader();
	        		if(!jr.jsonData) {
	        			cceaf.util.ExtHelper.showErrorDialog("没有设置正确的action或没有返回正确的json字符串！");
	        			return;
	        		}
	        		
	        		var message = jr.jsonData.message;
	        		var url = jr.jsonData.url;
	        		cceaf.util.ExtHelper.showInfoDialog(message,url);
	        	},
	        	'loadexception': function(){
	        		var jr = ds.getProxy().getReader();
	        		if(jr.jsonData){
		        		var message = jr.jsonData.message;
		        		var url = jr.jsonData.url;
		        		cceaf.util.ExtHelper.showErrorDialog(message,url);
	        		}
	        		else{
	        			cceaf.util.ExtHelper.showErrorDialog("返回无效的JSONDATA数据");
	        		}
	        	}
	        	
	        },
	        groupField: config.groupField,
	        autoDestroy: true,  
	        autoLoad:true,
	    	pageSize: szpshang.Global.PAGE_SIZE,
	    	model: config.model
	    });
	    
	    /**
	     * 默认查询区
	     */
	    var tempQueryToolbar = config.queryToolbar;
	    var queryToolbar = [], j=0;
	    //此部分解决extjs的一个bug，移除queryToolbar中dock非top的toolbar
	    Ext.Array.each(tempQueryToolbar, function(dockItem) {
	    	if (dockItem.dock == 'top') {
	    		queryToolbar[j++] = dockItem;
	    	}
	    });
	    if(this.isShowQueryToolbar){
			if(queryToolbar.length == 0){
				queryToolbar = [];
				queryToolbar[0] = {
					dock: 'top', 
					xtype: 'toolbar',
					items: [
						{xtype: "tbfill"},
			        	{itemId: 'btnQuery', xtype: 'cceafbutton', iconCls: 'page_queryIcon', text: ' 查询 '},
			        	'-',
			        	{itemId: 'btnReset', xtype: 'cceafbutton', iconCls: 'page_resetIcon', text: ' 重置 '}
					]
				};
			}
	    }
		
	    /**
		 * 默认操作区
		 */
		var operateArea = [],i=0;
		if(config.addAction){
			operateArea[i] = {itemId: 'btnAdd',  text: ' 新增 ', iconCls: 'page_addIcon'};
			i++;
			operateArea[i] = '-';
			i++;
		}
		if(config.editAction){
			operateArea[i] = {itemId: 'btnEdit',  text: ' 编辑 ', iconCls: 'page_editIcon'};
			i++;
			operateArea[i] = '-';
			i++;
		}
		if(config.viewAction){
			operateArea[i] = {itemId: 'btnView',  text: ' 查看 ', iconCls: 'page_viewIcon'};
			i++;
			operateArea[i] = '-';
			i++;
		}
		if(config.deleteAction){
			operateArea[i] = {itemId: 'btnDelete',  text: ' 删除 ', iconCls: 'page_deleteIcon'};
			i++;
			operateArea[i] = '-';
			i++;
		}
		
		var operateToolbar = config.operateToolbar;
		if(operateToolbar == null){
			var reOperateToolbar = config.reOperateToolbar;
			if (reOperateToolbar == null) {
				operateToolbar = {
					//dock: 'top', 
					xtype: 'toolbar',
					items: operateArea
				};
			} else {
				operateToolbar = {
					//dock: 'top', 
					xtype: 'toolbar',
					items: reOperateToolbar
				};
			}
		}else {
			//var array = Ext.Array.merge(operateArea,operateToolbar);
			var array = operateArea.concat(operateToolbar);
			operateToolbar = {
				//dock: 'top', 
				xtype: 'toolbar',
				items: array
			};
		}

		var pagingtoolbar = {
			xtype: 'pagingtoolbar',
			store: ds,
	        dock: 'bottom',  
	        displayInfo: true,
	        displayMsg:'当前显示 {0} - {1}条记录 /共 {2}条记录',
	      	emptyMsg:'无显示数据'
		};
		
		var dockedItems = queryToolbar;
		dockedItems[dockedItems.length] = operateToolbar;
		if (config.hasPagingToolbar === true) {
			dockedItems[dockedItems.length] = pagingtoolbar;
		}
		var title = '';
		if (config.moduleName) {
			title = config.moduleName + '信息';
		}
		
		Ext.applyIf(this, {
			store: ds,
			title: title,
	        border: true,
	        frame: true,
	        loadMask: {msg:'正在加载数据，请稍侯……'},
	        dockedItems: dockedItems
		});
		
		
		cceaf.control.GridPanel.superclass.initComponent.call(this);
    },
    
    /**
     * 创建bill form，对需要维护的页面必需重载此方法
     */
    createForm: function(){
    	if(this.billForm == null){
    		cceaf.util.ExtHelper.showErrorDialog('请重载queryGird的createForm方法创建维护表单！');
    	}
    }

});